package com.foreknow.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 什么是Session
 * Session是服务器端的会话技术，服务器在运行的时候可以为每一个用户的数据去创建一个单独的Session对象。
 * Session可以用户游览器独享。所以当在访问Web资源的时候，可以把自睡在的数据保存在各自的Session中。
 *
 * Session的核心
 * HttpSession：主要用于保存会话的数据. req.getSession()方法来获取HttpSession接口
 * 如何向Session中保存数据 session.setAttribute("name","zhangsan");
 * 如何获取到Session中的数据 session.getAttribute("name");  //zhangsan
 *
 * Session的原理：
 * 1.第一次创建一个Session对象，给Session分配一个唯一的id（JSESSIONID）
 * 2.要将JSESSIONID作为Cookie的值发送给游览器来保存
 * 3.在第二次访问的时候，游览器会携带JSESSIONID的cookie来访问服务器
 * 4.服务器要得到JSESSIONID，在服务器的内存中搜索是否存在对应编号的session对象
 *
 * 注意：保存在session中的数据会被多个servlet/jsp所共享，只要游览器不关闭，那么保存在session中的数据会一直有效
 *
 */
public class SessionDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        //获取到Session对象
        HttpSession session = req.getSession();
        //向Session对象中保存数据
        session.setAttribute("name","zhangsan");
        //如何从Session中获取数据
        String name = (String)session.getAttribute("name");
        out.println("JSESSIONID"+session.getId()+"-----"+name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}